package bank.sys;

//import Account;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class FileIO
{
	final private String memberDirName = "member";
	final private String memberDirPath = "member/";
	private File memberDir = new File(memberDirName);	 // 폴더명 : member

	/* Account 객체를 계좌번호를 이름으로 하는 파일로 Write */
	public  void accountWrite(Account account){
		
		if(!memberDir.isDirectory()){ 
			// member폴더가 존재하지 않으면 
			memberDir.mkdirs();
			//System.out.println("member 디렉토리를 생성했습니다.");

		} else {
			// member폴더가 존재하면

		}
		try {
			String realPath = memberDirName + "/" + account.getAccountNum();
			FileOutputStream fos = new FileOutputStream(realPath);
			ObjectOutputStream oos = new ObjectOutputStream(fos);
			oos.writeObject(account);
			oos.close();
		} catch(Exception e) {
			System.out.println("팔을 들어 인사해~ 겨드랑이에 두툼한 털을 모두 길러");
			System.out.println(e);
		}

	}// end of Account accountWrite


	/* Account Num(계좌번호)로 저장된 객체를 Read*/
	public Account accountRead(String AccountNumPath){
	
		Account storedAccount = null;

		String realPath = memberDirName + "/" + AccountNumPath;
	
		try {
			FileInputStream fis = new FileInputStream(realPath);
			if (fis != null){
				ObjectInputStream ois = new ObjectInputStream(fis);
				storedAccount = (Account) ois.readObject();
				// storedAccount관련 작업
				ois.close();
			}
		} catch(Exception e) {
			return null;
		}
		return storedAccount;
	}// end of Account accountRead


	/* Account Num으로 저장된 객체를 삭제 */	
	public void accountDelete(String accountNum){
		File file = new File (memberDirPath + accountNum);
		if ( file.isFile()){
			file.delete();
			System.out.println( "---> [" + accountNum + "] 계좌가 삭제되었습니다.");
		}else {
			System.out.println( "---> [" + accountNum + "] 는 존재하지 않은 계좌번호입니다.");
		}
		
	}// end of accountDelete

	/* ID 중복체크*/
	public boolean isIdUsed(String id){
		Account account;
		
		try {
			if(!memberDir.isDirectory()){ 
				// member폴더가 존재하지 않으면 
				memberDir.mkdirs();
				//System.out.println("member 디렉토리를 생성했습니다.");

			} else {
				// member폴더가 존재하면
			}

			File[] memberFiles = memberDir.listFiles();
			
			for (File file : memberFiles) {
				account = accountRead(file.getName());
				if (id.equals(account.getId()) ){
					System.out.println( "--->" + id +"는 이미 사용 중인 아이디 입니다. 다른 아이디를 입력해주세요.");
					return true;
				}
			}
			if (id.equals("admin")){
				System.out.println( "--->" + id +"는 이미 사용 중인 아이디 입니다. 다른 아이디를 입력해주세요.");
				return true;
			}
		}// try
		catch (Exception e){
			System.out.println("중복체크중에 에러가 발생하였습니다.");
			System.out.println(e);
		}
		return false;
	}// end of isIdUsed
	
/*
	public File[] getMemberFiles(){
		if (!memberDir.isDirectory()){
			memberDir.mkdirs();
		}
		File[] memberFiles = memberDir.listFiles();
		
		return memberFiles;
	}//end of getMemberFiles
*/
	
	/* 전체 계좌 목록 보기*/
	public void displayAllAccounts(){
		String head = "ID\t  \tName\t  \tAccount Number\t  \tBalance\t";
		System.out.println(head);
		
		Account account = null;
		File[] memberFiles = memberDir.listFiles();
		
		for (File file : memberFiles) {
			account = accountRead(file.getName());
			System.out.println( account.getId() + "\t  " 
				+ account.getName() + "\t  " 
				+ account.getAccountNum() + "\t  " 
				+ account.getBalance() );
		}
	}// end of displayAllAccount

	/* 계좌의 갯수 리턴*/
	public int getTotalIdNum(){

		File[] memberFiles = memberDir.listFiles();
		return memberFiles.length;
	}// end of getTotalIdNum

	/* Clear (은행망하는 메소드)*/
	public void clearMembers(){
		File[] memberFiles = memberDir.listFiles();

		for (File file : memberFiles) {
			file.delete();
		}

		System.out.println( "--->" + memberDirName +"폴더내의 기존 파일을 모두 삭제하였습니다.");
	}// end of clearMembers


}
